import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

/**
 *
 * RequestServlet(ResponseServlet) API:
 *
 * String getProtocol()  返回请求协议的名称和版本。
 * String getMethod()  返回请求的 HTTP 方法的名称，例如，GET、POST 或 PUT。
 * String getRequestURI()  从协议名称直到 HTTP 请求的第一行的查询字符串中，返回该请求的 URL 的一部分。
 * String getContextPath() 返回指示请求上下文的请求 URI 部分。
 *
 * String getQueryString() 返回包含在路径后的请求 URL 中的查询字符串。
 * Enumeration getParameterNames()  返回一个 String 对象的枚举，包含在该请求中包含的参数的名称。
 * String getParameter(String name)  以字符串形式返回请求参数的值，或者如果参数不存在则返回null。
 *
 *
 * String[] getParameterValues(String name)  返回一个字符串对象的数组，包含所有给定的请求参数的值，如果参数不存在则返回 null。
 * Enumeration getHeaderNames() 返回一个枚举，包含在该请求中包含的所有的头名。
 * String getHeader(String name)  以字符串形式返回指定的请求头的值。
 *
 * String getCharacterEncoding() 返回请求主体中使用的字符编码的名称。
 * String getContentType() 返回请求主体的 MIME 类型，如果不知道类型则返回 null。
 * int getContentLength() 以字节为单位返回请求主体的长度，并提供输入流，或者如果长度未知则返回 -1。
 *
 * InputStream getInputStream()   用于读取请求的 body 内容. 返回一个 InputStream 对象.
 *
 */

@WebServlet("/showRequestServlet")
public class ShowRequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html");

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(req.getProtocol()).append("<br>");
        stringBuilder.append(req.getMethod()).append("<br>");
        stringBuilder.append(req.getRequestURI()).append("<br>");
        stringBuilder.append(req.getContextPath()).append("<br>");
        stringBuilder.append(req.getQueryString()).append("<br>");

        // 把 请求的 header 也拼起来
        Enumeration<String> header = req.getHeaderNames();
        while (header.hasMoreElements()) {
            String name = header.nextElement();
            String value = req.getHeader(name);
            stringBuilder.append(name).append(": ").append(value).append("<br>");
        }

        resp.getWriter().write(stringBuilder.toString());

        StringBuffer str = req.getRequestURL(); // 完整路径
        System.out.println(str.toString());

        String s = req.getRequestURI(); // 除去host(域名或者ip)部分的路径.
        System.out.println(s);

        s = req.getContextPath(); //
        System.out.println(s);

        s = req.getServletPath();
        System.out.println(s);

    }
}
